<?php
/**
 * User:
 * Date:
 * Time:
 */

namespace App\Common\RedisCache;

use Illuminate\Support\Facades\Log;

Abstract class AbstractSpecialCache extends AbstractCache
{
    /**
     * 是否json处理
     * @var bool
     */
    protected static $json = false;


    /**
     * 布隆过滤器写入 //批量命令可再增加方法
     * @param $value
     * @return bool
     */
    public function bfAdd($value)
    {
        $this->select();
        if(empty($this->key)){
            Log::INFO("写入无hash");
            return false;
        }
        return $this::$client->rawCommand("bf.add",$this->key,$value);
    }

    /**
     * 布隆过滤器查询 批量可增加方法
     * @param $value
     * @return bool
     */
    public function bfExit($value)
    {
        $this->select();

        if (empty($this->key)) {
            Log::INFO("查询无hash");
            return false;
        }
        return $this::$client->rawCommand("bf.exists",$this->key,$value);
    }

    /**
     * 布隆过滤器初始化 批量可增加方法
     * @param $value
     * @param $error_rate //错误率 允许布隆过滤器的错误率，这个值越低过滤器占用空间也就越大，以为此值决定了位数组的大小，位数组是用来存储结果的，它的空间占用的越大（存储的信息越多），错误率就越低，它的默认值是 0.01。
     * @param $initial_size //布隆过滤器存储的元素大小，实际存储的值大于此值，准确率就会降低，它的默认值是 100
     * @return bool
     */
    public function bfReserve($error_rate,$initial_size)
    {
        $this->select();

        if (empty($this->key)) {
            Log::INFO("查询无hash");
            return false;
        }
        return $this::$client->rawCommand("bf.reserve",$this->key,$error_rate,$initial_size);
    }

    public function len($key = ''): int
    {
        // TODO: Implement len() method.
    }

    function set($value)
    {
        // TODO: Implement set() method.
    }

    function get($key = '')
    {
        // TODO: Implement get() method.
    }

}
